'use strict';

const _ = require('lodash');

exports.index = async ctx => {
  const configs = await ctx.model.Config.findAll({ raw: true });
  ctx.body = configs.map(config => ({
    ..._.pick(
      config,
      [ 'key', 'name', 'type' ]
    ),
    value: config[config.type],
  }));
};

exports.show = async ctx => {
  const config = await ctx.model.Config.findById(ctx.params.id, {
    raw: true,
  });
  if (config) {
    ctx.body = config;
  } else {
    ctx.status = 404;
  }
};

exports.update = async ctx => {
  const config = await ctx.model.Config.findByPrimary(ctx.params.id);
  if (config) {
    const { value } = ctx.request.body;
    if (value) {
      ctx.body = await config.update({ [config.type]: value });
    } else {
      ctx.body = config;
    }
  } else {
    ctx.status = 404;
  }
};
